home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / comm2 / zpont311.lha / zpoint-3.11 / Rexx / RequestCL.zprx.old < prev    next >
Text File  |  1995-08-21  |  10KB  |  331 lines

  1. /*
  2.    $VER: RequestCL 1.12 (17.8.95) von Albert Weinert und Ralph Seichter
  3.  
  4.    Das Skript benötigt Jürgen Kohrmeyer's "rexxtricks.library" und
  5.    Ralph Seichter's "Zodiac's Point" V37.180 oder besser bzw. Oliver
  6.    Wagner's "MicroDot" V1.10 oder besser.
  7.  
  8.  
  9.    FUNKTIONSBESCHREIBUNG:
  10.  
  11.    Dieses Skript durchsucht eine 'Neue Files vom ...' Nachricht vom
  12.    Connectline-eigenen 'Mailer-Daemon' nach bestellbaren Dateien. Alle
  13.    gefundenen Dateien werden alphabetisch sortiert in einem Fenster auf
  14.    dem entsprechenden Screen dargestellt. Hier können Sie die gewünschten
  15.    Dateien bestellen, Multi-Select ist dabei möglich.
  16.  
  17.  
  18.    INSTALLATION:
  19.  
  20.    Bei Zodiac's Point:
  21.  
  22.       Kopieren sie dieses Skript unter dem Namen "RequestCL.zprx" ins
  23.       Rexx-Verzeichnis von ZP. Sie können es dann an das Gadget [Bestellen]
  24.       binden, indem Sie in der Datei "maps/request.zp" den Text
  25.  
  26.          .key FILE/A,SCREEN/A
  27.          .bra {
  28.          .ket }
  29.          Delete >NIL: {FILE}
  30.          Run >NIL: SYS:Rexxc/RX ZP:Rexx/RequestCL.zprx {SCREEN}
  31.  
  32.       eintragen (bitte passen Sie ggf. den Pfad für 'RX' an).
  33.  
  34.    Bei Microdot:
  35.  
  36.       Das Programm unter dem Namen "RequestCL.mdmrexx" in das Rexx
  37.       Verzeichnis von Microdot kopieren.
  38.  
  39.    ANPASSEN DES SKRIPTS:
  40.  
  41.    Am Anfang des Skripts können einige Parameter eingestellt werden:
  42.  
  43.    mapsadr     - Adresse des MAPS-Dienstes.
  44.  
  45.    maildemon   - Absendermuster für Mailer-Dämon.
  46.  
  47.    boardindex  - Betreffmuster für Inhaltsverzeichnisse von Brettern.
  48.  
  49.    requestcmd  - MAPS-Befehlt zum Bestellen von Nachrichten.
  50.  
  51.    usebrackets - Sollen MID-Klammern <> benutzt werden?
  52.  
  53.    board.count - Siehe Erklärung weiter unten.
  54.  
  55.    board.i.[p] - Parameter 'p' für Struktur mit Index 'i'. Für 'p' sind
  56.                  die folgenden Einträge definiert:
  57.  
  58.    pattern     - Das Skript prüft, ob es in einem Brett aufgerufen wurde,
  59.                  dessen Name auf das hier definierte Muster paßt. Trifft
  60.                  dies zu, werden die weiteren Parameter genutzt.
  61.  
  62.    showfilesz  - Sollen Dateilängen angezeigt werden (1 = ja, 0 = nein)?
  63.  
  64.    showboards  - Sollen Brettnamen angezeigt werden?
  65.  
  66.    discard     - Bestimmt den Text, bis zu dem der Brettname abgeschnitten
  67.                  werden soll. Das Abschneiden erfolgt bei dem am weitesten
  68.                  rechts in Namen gefundenen Auftreten des Textes.
  69.  
  70.    showreadme  - Sollen #?.readme Dateien angezeigt werden?
  71.  
  72.    comments    - Sollen die Kurzkommentare angezeigt werden?
  73.  
  74.    boardnamesz - Anzahl der Zeichen pro Brettname.
  75.  
  76.    filenamesz  - Anzahl der Zeichen pro Dateiname.
  77.  
  78.    winwidth    - Gesamtbreite des Fensters in Pixeln.
  79. */
  80.  
  81.  
  82. mapsadr      = 'maps'
  83. maildemon    = 'Newfiles@#?'
  84. boardindex   = 'Re#?INHALT'
  85. requestcmd   = 'REQUEST'
  86. usebrackets  = 0
  87.  
  88. /* 'board.count' gibt den Index der letzten definierten Parameterstruktur
  89.    an. Wenn Sie also als letzten Eintrag 'board.9.winwidth' benutzen, muß
  90.    die folgende Zeile in 'board.count = 9' geändert werden. */
  91.  
  92. board.count = 2
  93.  
  94. board.0.pattern      = '#?AMINET'   /* Parameter für Aminet-Bretter */
  95. board.0.showfilesz   = 1
  96. board.0.showboards   = 1
  97. board.0.discard      = 'AMINET/'    /* Entferne das führende 'AMINET/' */
  98. board.0.showreadme   = 0            /* von den Brettnamen.             */
  99. board.0.showcomments = 1
  100. board.0.boardnamesz  = 11
  101. board.0.filenamesz   = 20
  102. board.0.winwidth     = 813
  103.  
  104. board.1.pattern      = '#?/FAQ'  /* Parameter für FAQ-Bretter */
  105. board.1.showfilesz   = 1
  106. board.1.showboards   = 1
  107. board.1.discard      = ''
  108. board.1.showreadme   = 0
  109. board.1.showcomments = 0
  110. board.1.boardnamesz  = 12
  111. board.1.filenamesz   = 60
  112. board.1.winwidth     = 813
  113.  
  114. board.2.pattern      = '#?'      /* Parameter für alle übrigen Bretter. */
  115. board.2.showfilesz   = 1         /* Der Eintrag für 'pattern' muß '#?'  */
  116. board.2.showboards   = 1         /* lauten, ändern Sie das niemals!     */
  117. board.2.discard      = ''
  118. board.2.showreadme   = 1
  119. board.2.showcomments = 1
  120. board.2.boardnamesz  = 35
  121. board.2.filenamesz   = 30
  122. board.2.winwidth     = 813
  123.  
  124.  
  125.  
  126. /********************************************************************/
  127. /*** !!! BITTE AENDERN SIE UNTERHALB DIESER ZEILE NICHTS MEHR !!! ***/
  128. /********************************************************************/
  129.  
  130. OPTIONS RESULTS
  131.  
  132. IF (~SHOW('LIBRARIES', 'rexxtricks.library') & ~ADDLIB('rexxtricks.library', 0, -30, 0)) THEN DO
  133.    requestnotify 'Kann rexxtricks.library nicht öffnen!'
  134.    EXIT(5)
  135. END
  136.  
  137. IF (~SHOW('LIBRARIES','rexxsupport.library') & ~ADDLIB('rexxsupport.library', 0, -30, 0)) THEN DO
  138.    requestnotify 'Kann rexxsupport.library nicht öffnen!'
  139.    EXIT(5)
  140. END
  141.  
  142. rexxport = ADDRESS()
  143.  
  144. IF MATCHPATTERN(rexxport, "MICRODOT#?") THEN
  145.    md = 1
  146. ELSE
  147.    md = 0
  148.  
  149. IF md THEN
  150.    getmdpubscreenname var pubscreen
  151. ELSE DO
  152.    PARSE ARG rexxport
  153.    rexxport = COMPRESS(rexxport)
  154.    IF rexxport = '' THEN
  155.       rexxport = 'ZPoint'
  156.    ADDRESS VALUE rexxport
  157.    pubscreen = rexxport
  158. END
  159.  
  160. IF md THEN DO
  161.    getcurrentboard stem brett.
  162.    boardname = brett.name
  163. END
  164. ELSE DO
  165.    boardinfo label
  166.    boardname = result
  167. END
  168.  
  169. disc = ''
  170. DO i = 0 TO board.count
  171.    IF MATCHPATTERN(boardname, board.i.pattern) THEN DO
  172.       showfilesz   = board.i.showfilesz
  173.       showboards   = board.i.showboards
  174.       showreadme   = board.i.showreadme
  175.       showcomments = board.i.showcomments
  176.       boardnamesz  = board.i.boardnamesz
  177.       filenamesz   = board.i.filenamesz
  178.       winwidth     = board.i.winwidth
  179.       disc         = board.i.discard
  180.       LEAVE i
  181.    END
  182. END
  183.  
  184. IF md THEN DO
  185.    getcurrentmailheader ABS var absender
  186.    getcurrentmailheader BET var betreff
  187. END
  188. ELSE DO
  189.    messageinfo author
  190.    absender = RESULT
  191.    messageinfo fullsubject
  192.    betreff = RESULT
  193. END
  194.  
  195. fromdemon = MATCHPATTERN(absender, maildemon)
  196. IF (~fromdemon & ~MATCHPATTERN(betreff, boardindex)) THEN DO
  197.    requestnotify 'Unbekanntes Nachrichtenformat!'
  198.    EXIT(5)
  199. END
  200.  
  201. inname  = 'T:1-RequestCL.zpmd'
  202. outname = 'T:2-RequestCL.zpmd'
  203. IF md THEN DO
  204.    extractcurrentmail inname
  205.    IF RC THEN DO
  206.       request '"Kann Nachricht nicht speichern!"' 'Schade'
  207.       EXIT(5)
  208.    END
  209. END
  210. ELSE DO
  211.    savemessagebody inname
  212.    IF ~RC THEN DO
  213.       requestnotify 'Kann Nachricht nicht speichern!'
  214.       EXIT(5)
  215.    END
  216. END
  217.  
  218. IF ~READFILE(inname, 'line') THEN DO
  219.    IF md THEN
  220.       request '"Kann 'inname' nicht lesen!"' 'Schade'
  221.    ELSE
  222.       requestnotify 'Kann 'inname' nicht lesen!'
  223.    EXIT(5)
  224. END
  225.  
  226. IF ~md THEN
  227.    'guilock text="Bitte haben Sie Geduld..."'
  228.  
  229. CALL ParseBody
  230.  
  231. dummy = DELETE(inname)
  232.  
  233. windef.pubscreen = pubscreen
  234. windef.title     = 'Zu bestellende Nachrichten auswählen'
  235. windef.postext   = '_Bestellen'
  236. windef.negtext   = '_Abbruch'
  237. windef.sort      = 'TRUE'
  238. windef.font      = 'DEFAULT'
  239. windef.width     = winwidth
  240. IF VIEWLIST('string', 'windef', 'destvar') THEN DO
  241.    IF ~OPEN('temp2', outname, 'WRITE') THEN DO
  242.       BEEP()
  243.       EXIT(5)
  244.    END
  245.    smail = 0
  246.    DO i = 0 TO destvar.count - 1
  247.       x = LSEARCH(destvar.i, 'string')
  248.       IF x ~= (-1) THEN DO
  249.          dummy = WRITELN('temp2', entry.x)
  250.          smail = 1
  251.       END
  252.    END
  253.    dummy = CLOSE('temp2')
  254.    IF smail THEN DO
  255.       IF md THEN DO
  256.          sendmail 'to='mapsadr' bodyfile='outname' subject='requestcmd
  257.          IF RESULT = '' THEN DO
  258.             request '"Kann Bestellung nicht verschicken!"' 'Schade'
  259.             EXIT(5)
  260.          END
  261.       END
  262.       ELSE DO
  263.          writemessage 'file='outname' receiver='mapsadr' subject='requestcmd
  264.          IF RESULT = '' THEN DO
  265.             requestnotify 'Kann Bestellung nicht verschicken!'
  266.             EXIT(5)
  267.          END
  268.       END
  269.    END
  270.    ELSE
  271.       dummy = DELETE(outname)
  272. END
  273.  
  274. IF ~md THEN
  275.    guilock off
  276. EXIT(0)
  277.  
  278.  
  279. /* Nachricht vom 'Mailer-Daemon' nach bestellbaren Files durchsuchen. */
  280.  
  281. ParseBody:
  282.    mi = -1
  283.    entries = 0
  284.    DO i = 0 TO line.count - 1
  285.       IF i > mi THEN DO
  286.          IF ((fromdemon & LEFT(line.i, 25) = 'Neue Nachrichten im Brett') | (~fromdemon & LEFT(line.i, 19) = '-- Inhalt von Brett')) THEN
  287.             currentboard = LEFT(WORD(line.i, 5), LENGTH(WORD(line.i, 5)) - 1)
  288.          IF DATATYPE(WORD(line.i, 3)) = 'NUM' THEN DO
  289.             mi = 0;
  290.             DO j = i + 2 UNTIL (mi > 0 | j >= line.count)
  291.                IF WORD(line.j, 1) = '>Msg-ID:' THEN mi = j
  292.             END                         
  293.             IF mi = 0 THEN
  294.                use = 0
  295.             ELSE
  296.                use = 1
  297.             IF ~showreadme THEN
  298.                IF MATCHPATTERN(line.i, '#?.readme#?') THEN
  299.                   use = 0
  300.             IF use THEN DO
  301.                mid = WORD(line.mi, 2)
  302.                IF (~usebrackets & LEFT(mid, 1) = '<') THEN
  303.                   mid = SUBSTR(mid, 2, LENGTH(mid) - 2)
  304.                entry.entries = currentboard' 'mid
  305.                string.entries = SUBWORD(SUBSTR(line.i, 43), 1)
  306.                comment = ''
  307.                IF showcomments THEN
  308.                   DO j = i + 2 TO mi - 2
  309.                      comment = comment' 'STRIP(SUBSTR(line.j, 43), 'T')
  310.                   END
  311.                IF showfilesz THEN
  312.                   string.entries = LEFT(string.entries, filenamesz)' 'RIGHT(WORD(line.i, 3), 7)' 'comment
  313.                IF showboards THEN DO
  314.                   tempboard = currentboard
  315.                   IF disc ~= '' THEN DO
  316.                      pos = LASTPOS(disc, currentboard)
  317.                      IF pos >= 1 THEN
  318.                         tempboard = SUBSTR(currentboard, pos + LENGTH(disc))
  319.                   END
  320.                   string.entries = LEFT(tempboard, boardnamesz)' 'string.entries
  321.                END
  322.                entries = entries + 1
  323.             END
  324.          END
  325.       END
  326.    END
  327.    string.count = entries
  328. RETURN
  329.  
  330. /* EOF */
  331.